package com.aiti.lulian.flow.business;

import com.aiti.lulian.flow.dto.FlowParamDto;

/**
 * 业务实现该接口，用于流程过程回调
 */
public interface BusinessFlowService {

    /**
     * 流程发起前执行。
     * 抛出任何异常都不会发起流程
     * @param flowParam
     * @throws Exception
     */
    void beforeStartFlow(FlowParamDto flowParam);

    /**
     * 保存或更新业务数据
     * @param flowParam
     * @return 业务数据id
     * @throws Exception
     */
    String saveBusinessData(FlowParamDto flowParam);

    /**
     * 节点通过后执行
     * @param flowInstanceId 流程实例id
     * @param nodeKey 当前节点key
     * @param businessId 业务数据id
     * @throws Exception
     */
    void passNode(String flowInstanceId, String nodeKey, String businessId);

    /**
     * 节点完成后执行
     * @param flowInstanceId 流程实例id
     * @param nodeKey 当前节点key
     * @param businessId 业务数据id
     * @throws Exception
     */
    void flowComplete(String flowInstanceId, String businessId) ;

    /**
     * 节点驳回后执行
     * @param flowInstanceId 流程实例id
     * @param nodeKey 当前节点key
     * @param businessId 业务数据id
     * @throws Exception
     */
    void flowReject(String flowInstanceId, String nodeKey, String businessId);
}
